#ifndef __NGX_COMMOM_H__
#define __NGX_COMMOM_H__

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <signal.h> 
#include <errno.h>
#include <arpa/inet.h>
#include <sys/time.h>          //gettimeofday
#include "ngx_macro.h"         //各种宏定义
#include "ngx_func.h"          //各种函数声明
#include "ngx_c_conf.h"        //和配置文件处理相关的类,名字带c_表示和类有关
#include "ngx_c_socket.h"      //和socket通讯相关
#include "ngx_c_memory.h"      //和内存分配释放等相关
#include "ngx_c_threadpool.h"  //和多线程有关
#include "ngx_c_crc32.h"       //和crc32校验算法有关 
#include "ngx_c_slogic.h"      //和socket通讯相关

/*函数声明*/
static void freeresource();

/*设置标题有关的全局变量*/
size_t  g_argvneedmem=0;        //保存下这些argv参数所需要的内存大小
size_t  g_envneedmem=0;         //环境变量所占内存大小
int     g_os_argc;              //参数个数 
char    **g_os_argv;            //原始命令行参数数组,在main中会被赋值
char    *gp_envmem=NULL;        //指向自己分配的env环境变量的内存，在ngx_init_setproctitle()函数中会被分配内存
int     g_daemonized=0;         //守护进程标记，标记是否启用了守护进程模式，0：未启用，1：启用了


/*socket/线程池相关*/
CLogicSocket   g_socket;        //socket全局对象
CThreadPool    g_threadpool;    //线程池全局对象


/*和进程本身有关的全局变量*/
pid_t   ngx_pid;                //当前进程的pid
pid_t   ngx_parent;             //父进程的pid
int     ngx_process;            //进程类型
int     g_stopEvent;            //标志程序退出,0不退出1，退出


/*标记子进程状态变化，一般是子进程发来SIGCHLD信号表示退出
,sig_atomic_t:系统定义的类型：访问或改变这些变量需要在计
算机的一条指令内完成一般等价于int，通常情况下，int类型的
变量通常是原子访问的，也可以认为 sig_atomic_t就是int类型的数据*/
sig_atomic_t  ngx_reap;


#endif